// 自启动小红书app
auto.waitFor();
app.launch("com.xingin.xhs");
// 点击购物
console.log("点击购物");
desc('购物').click();
// 等待页面加载
sleep(1500);
// 点击搜索
text('搜索').click();
// 清空输入框();
desc('全部删除').click();
// 输入关键词
console.log("输入关键词");
setText("办公椅");
text('搜索').click();
// 等待页面加载
sleep(1500);

// 识别width = 316，高度>= 316的图片
/**
 * 查找符合尺寸条件的商品图片
 * @returns {Array} 符合条件的图片控件数组
 */
/**
 * 查找符合尺寸条件且不含"直播中"文字的商品图片
 * @returns {Array} 符合条件的图片控件数组
 */
function findProductImagesBySize() {
    console.log("开始查找符合尺寸条件的商品图片...");
    
    // 查找所有ImageView控件
    let allImages = className("android.widget.ImageView").find();
    let validImages = [];
    
    console.log("找到图片总数:", allImages.length);
    
    for (let i = 0; i < allImages.length; i++) {
        let img = allImages[i];
        let bounds = img.bounds();
        let width = bounds.width();
        let height = bounds.height();
        
        // 检查是否符合条件：宽度=316，高度>=316
        if (width === 316 && height >= 316) {
            console.log(`检查图片 ${i+1}: 宽度=${width}, 高度=${height}`);
            console.log(`图片位置: (${bounds.left}, ${bounds.top}, ${bounds.right}, ${bounds.bottom})`);
            
            // 进行OCR识别，检查是否含有"直播中"文字
            try {
                console.log(`正在对图片 ${i+1} 进行OCR识别...`);
                
                // 截取图片区域进行OCR识别，扩大识别范围以包含可能的标签
                let screenshot = captureScreen();
                if (screenshot) {
                    // 扩大识别区域，向上和向右各扩展50像素以捕获可能的标签
                    let expandedLeft = Math.max(0, bounds.left - 20);
                    let expandedTop = Math.max(0, bounds.top - 50);
                    let expandedWidth = Math.min(screenshot.getWidth() - expandedLeft, width + 70);
                    let expandedHeight = Math.min(screenshot.getHeight() - expandedTop, height + 70);
                    
                    let croppedImage = images.clip(screenshot, expandedLeft, expandedTop, expandedWidth, expandedHeight);
                    let ocrResult = paddle.ocr(croppedImage);
                    
                    // 检查OCR结果中是否包含直播相关文字
                    let hasLiveText = false;
                    if (ocrResult && ocrResult.length > 0) {
                        for (let j = 0; j < ocrResult.length; j++) {
                            let text = ocrResult[j].text;
                            console.log(`OCR识别文字: "${text}"`);
                            
                            // 更全面的直播文字检测
                            let liveKeywords = ["直播中", "直播", "LIVE", "live", "Live", "播中", "直播间"];
                            let foundLiveKeyword = false;
                            
                            for (let keyword of liveKeywords) {
                                if (text.includes(keyword)) {
                                    hasLiveText = true;
                                    foundLiveKeyword = true;
                                    console.log(`图片 ${i+1} 包含直播关键词 "${keyword}"，跳过该图片`);
                                    break;
                                }
                            }
                            
                            if (foundLiveKeyword) break;
                        }
                    } else {
                        console.log(`图片 ${i+1} OCR未识别到任何文字`);
                    }
                    
                    // 释放图片资源
                    croppedImage.recycle();
                    
                    // 如果不包含直播文字，则添加到有效图片列表
                    if (!hasLiveText) {
                        console.log(`图片 ${i+1} 通过检查，添加到有效列表`);
                        validImages.push(img);
                    } else {
                        console.log(`图片 ${i+1} 被跳过（包含直播内容）`);
                    }
                } else {
                    console.log(`无法截取屏幕，跳过图片 ${i+1} 的OCR检查`);
                }
            } catch (error) {
                console.log(`图片 ${i+1} OCR识别失败: ${error.message}`);
                console.log(`将图片 ${i+1} 添加到有效列表（OCR失败时默认通过）`);
                validImages.push(img);
            }
        }
    }
    
    console.log("符合条件且不含直播文字的图片数量:", validImages.length);
    return validImages;
}

/**
 * 点击第一个符合条件的商品图片
 */
/**
 * 点击第一个符合条件的商品图片（带循环控制）
 */
function clickFirstValidProductImage() {
    // 检查循环控制条件
    if (productCount >= maxProducts) {
        console.log(`已达到最大处理数量 ${maxProducts}，停止执行`);
        return false;
    }
    
    if (consecutiveFailures >= maxFailures) {
        console.log(`连续失败 ${maxFailures} 次，停止执行`);
        return false;
    }
    
    console.log(`开始处理第 ${productCount + 1} 个商品...`);
    
    let validImages = findProductImagesBySize();
    
    if (validImages.length > 0) {
        console.log("点击第一个符合条件的商品图片");
        let targetImage = validImages[0];
        let bounds = targetImage.bounds();
        
        // 尝试多种点击方式
        try {
            // 方式1: 直接点击控件
            console.log("尝试直接点击控件...");
            targetImage.click();
            sleep(500);
            
            // 方式2: 如果直接点击无效，尝试点击中心坐标
            console.log("尝试点击中心坐标...");
            let centerX = bounds.centerX();
            let centerY = bounds.centerY();
            console.log(`点击坐标: (${centerX}, ${centerY})`);
            click(centerX, centerY);
            sleep(500);
            
            // 方式3: 尝试点击父容器
            console.log("尝试点击父容器...");
            let parent = targetImage.parent();
            if (parent) {
                parent.click();
                sleep(500);
            }
            
            // 点击成功，增加计数并重置失败次数
            productCount++;
            consecutiveFailures = 0;
            console.log(`商品点击成功，当前进度: ${productCount}/${maxProducts}`);
            
            // 商品点击成功后，执行分享操作
            checkShopTextAndShare();
            
            return true;
        } catch (error) {
            console.log("点击出错:", error);
            consecutiveFailures++;
            console.log(`连续失败次数: ${consecutiveFailures}/${maxFailures}`);
            return false;
        }
    } else {
        console.log("未找到符合条件的商品图片");
        consecutiveFailures++;
        console.log(`连续失败次数: ${consecutiveFailures}/${maxFailures}`);
        return false;
    }
}

// 全局变量：循环控制
let productCount = 0;           // 已处理的商品数量
let maxProducts = 30;           // 最大处理商品数量
let consecutiveFailures = 0;    // 连续失败次数
let maxFailures = 3;           // 最大连续失败次数

/**
 * 主执行函数：循环抓取商品分享链接
 */
function startProductCrawling() {
    console.log("=== 开始批量抓取商品分享链接 ===");
    console.log(`目标数量: ${maxProducts} 个商品`);
    console.log(`最大失败次数: ${maxFailures} 次`);
    
    // 重置计数器
    productCount = 0;
    consecutiveFailures = 0;
    
    // 开始第一次抓取
    clickFirstValidProductImage();
}

// 等待页面完全加载后再执行
sleep(2000);
console.log("开始执行图片识别和点击...");
startProductCrawling();
/**
 * 检查指定区域的文本并执行相应操作
 */
function checkShopTextAndShare() {
    console.log("检查店铺文本...");
    
    // 查找指定bounds区域的控件
    let shopElement = bounds(2, 876, 68, 960).findOne(3000);
    
    if (shopElement) {
        let elementText = shopElement.text();
        console.log("找到控件，文本内容:", elementText);
        
        // 检查文本是否为"店铺"
        if (elementText === "店铺") {
            console.log("检测到店铺文本，开始点击分享图标");
            
            // 点击分享图标
            sleep(1000);
            click(301, 69);
            console.log("已点击分享图标坐标: (301, 69)");
            
            // 点击复制链接
            sleep(1500);
            bounds(22, 802, 122, 937).click();
            console.log("已点击复制链接按钮");
            
            // 等待复制完成
            sleep(1000);
            
            // 打印粘贴板内容
            try {
                // 使用AutoJS内置的剪贴板API
                let clipboardContent = getClip();
                console.log("粘贴板内容(内置API):", clipboardContent);
                
                // 可选：将内容保存到文件
                let clipboardDir = "/sdcard/脚本/";
                let clipboardFile = clipboardDir + "clipboard.json";
                
                // 确保目录存在
                if (!files.exists(clipboardDir)) {
                    files.createWithDirs(clipboardDir);
                    console.log("创建目录:", clipboardDir);
                }
                
                // 保存到JSON文件（追加模式）
                if (clipboardContent) {
                    let jsonData = {
                        timestamp: new Date().toISOString(),
                        content: clipboardContent,
                        source: "小红书分享链接"
                    };
                    
                    // 读取现有数据
                    let existingData = [];
                    if (files.exists(clipboardFile)) {
                        try {
                            let existingContent = files.read(clipboardFile);
                            existingData = JSON.parse(existingContent);
                            if (!Array.isArray(existingData)) {
                                existingData = [];
                            }
                        } catch (e) {
                            console.log("读取现有JSON文件失败，创建新数组:", e);
                            existingData = [];
                        }
                    }
                    
                    // 追加新数据
                    existingData.push(jsonData);
                    
                    // 写入文件
                    files.write(clipboardFile, JSON.stringify(existingData, null, 2));
                    
                    // 确保文件保存完成
                    try {
                        // 强制刷新文件缓冲区，确保数据写入磁盘
                        files.ensureDir(files.path(clipboardFile).parent);
                        console.log("文件已成功保存并关闭");
                    } catch (saveError) {
                        console.log("文件保存确认失败:", saveError);
                    }
                    
                    console.log("粘贴板内容已追加到JSON文件:", clipboardFile);
                    console.log("当前记录数:", existingData.length);
                } else {
                    console.log("粘贴板内容为空");
                }
                
            } catch (error) {
                console.log("获取粘贴板内容失败:", error);
                
                // 备用方案：尝试读取已存在的文件
                try {
                    let clipboardFile = "/sdcard/脚本/clipboard.json";
                    if (files.exists(clipboardFile)) {
                        let fileContent = files.read(clipboardFile);
                        console.log("从文件读取的内容:", fileContent);
                    } else {
                        console.log("粘贴板文件不存在，跳过读取");
                    }
                } catch (fileError) {
                    console.log("读取文件也失败:", fileError);
                }
            }
            
            // 模拟按下返回键
            let result = back();
            console.log("返回键执行结果:", result);
            
            // 返回列表后向上滑动500像素
            sleep(1000);
            console.log("返回列表，开始向上滑动...");
            
            // 获取屏幕尺寸并确保坐标为正数
            let screenWidth = device.width;
            let screenHeight = device.height;
            
            console.log(`原始屏幕尺寸: ${screenWidth}x${screenHeight}`);
            
            // 确保屏幕尺寸有效
            if (screenWidth <= 0 || screenHeight <= 0) {
                console.log("屏幕尺寸无效，使用默认值");
                screenWidth = 1080;
                screenHeight = 1920;
            }
            
            // 计算安全的滑动坐标
            let startX = Math.floor(screenWidth / 2);
            let startY = Math.floor(screenHeight * 0.8); // 从屏幕80%位置开始
            let endX = startX;
            let endY = Math.floor(screenHeight * 0.1); // 滑动到屏幕10%位置
            
            // 确保所有坐标都是正数且在合理范围内
            startX = Math.max(50, Math.min(startX, screenWidth - 50));
            startY = Math.max(100, Math.min(startY, screenHeight - 100));
            endX = Math.max(50, Math.min(endX, screenWidth - 50));
            endY = Math.max(100, Math.min(endY, screenHeight - 100));
            
            console.log(`计算后屏幕尺寸: ${screenWidth}x${screenHeight}`);
            console.log(`滑动坐标: (${startX}, ${startY}) -> (${endX}, ${endY})`);
            
            // 验证坐标有效性
            if (startX > 0 && startY > 0 && endX > 0 && endY > 0 && startY > endY) {
                swipe(startX, startY, endX, endY, 800);
                console.log("向上滑动完成");
                
                // 滑动成功后，等待页面稳定，然后继续抓取下一个商品
                sleep(2000);
                console.log("滑动后等待页面稳定，准备抓取下一个商品...");
                
                // 检查是否还需要继续循环
                if (productCount < maxProducts && consecutiveFailures < maxFailures) {
                    // 等待1秒后继续抓取下一个商品
                    sleep(1000);
                    console.log("开始抓取下一个商品...");
                    clickFirstValidProductImage();
                } else {
                    console.log("循环结束条件满足，停止抓取");
                    console.log(`最终统计: 成功处理 ${productCount} 个商品，连续失败 ${consecutiveFailures} 次`);
                }
                
            } else {
                console.log("坐标验证失败，跳过滑动操作");
                console.log(`坐标检查: startX=${startX}, startY=${startY}, endX=${endX}, endY=${endY}`);
            }
            
            return true;
        } else {
            console.log("文本不是'店铺'，跳过分享操作");
            return false;
        }
    } else {
        console.log("未找到指定区域的控件");
        return false;
    }
}

// 不再单独调用checkShopTextAndShare，因为它已经集成到循环逻辑中


